// src/utils/dateUtils.ts

// 按照规定格式 输出当前时间
export function formatCurrentTime() {
    const now = new Date()
    const year = now.getFullYear()
    const month = String(now.getMonth() + 1).padStart(2, '0')
    const day = String(now.getDate()).padStart(2, '0')
    const hours = String(now.getHours()).padStart(2, '0')
    const minutes = String(now.getMinutes()).padStart(2, '0')
    const seconds = String(now.getSeconds()).padStart(2, '0')

    return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`
}


export const formatDateTime = (dateTime: string): string => {
    if (!dateTime) return ''

    const date = new Date(dateTime)
    const year = date.getFullYear()
    const month = String(date.getMonth() + 1).padStart(2, '0')
    const day = String(date.getDate()).padStart(2, '0')
    const hours = String(date.getHours()).padStart(2, '0')
    const minutes = String(date.getMinutes()).padStart(2, '0')
    const seconds = String(date.getSeconds()).padStart(2, '0')

    return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`
}

/**
 * 将毫秒数转换为友好的时间格式（X天X小时X分钟X秒）
 * @param millis 毫秒数（可以是 number 或 string 类型的 Long）
 * @returns 格式化后的时间字符串
 */
export const formatDuration = (millis: number | string): string => {
    // 将字符串类型的 Long 转换为 number
    const milliseconds = typeof millis === 'string' ? Number(millis) : millis;

    if (milliseconds <= 0) {
        return '0秒';
    }

    const seconds = Math.floor(milliseconds / 1000);
    const days = Math.floor(seconds / (24 * 3600));
    const hours = Math.floor((seconds % (24 * 3600)) / 3600);
    const minutes = Math.floor((seconds % 3600) / 60);
    const remainingSeconds = seconds % 60;

    const parts: string[] = [];

    if (days > 0) {
        parts.push(`${days}天`);
    }
    if (hours > 0) {
        parts.push(`${hours}小时`);
    }
    if (minutes > 0) {
        parts.push(`${minutes}分钟`);
    }
    if (remainingSeconds > 0 || parts.length === 0) {
        parts.push(`${remainingSeconds}秒`);
    }

    return parts.join('');
};


/**
 * 生成当前年月对应的字符串，比如202511
 */
export function generateMonthlyTimeStr() {
    const now = new Date();
    const year = now.getFullYear();
    const month = now.getMonth() + 1; // 0-11 → 1-12

    // 使用年月作为种子生成固定值
    const baseValue = year * 100 + month;

    // 可以添加固定的后缀来达到需要的位数
    // 这里生成一个16位的固定值：年月 + 固定后缀
    return baseValue.toString()
}

// 简化版本 - 基于当月第几个周一来计算 比如202511.1 表示2025年11月的第一个周
export function generateSimpleMonthWeek(date = new Date()) {
    const year = date.getFullYear();
    const month = (date.getMonth() + 1).toString().padStart(2, '0');

    // 获取当月第一天
    const firstDay = new Date(date.getFullYear(), date.getMonth(), 1);

    // 计算第一个周一的日期
    let firstMonday = new Date(firstDay);
    const firstDayWeek = firstDay.getDay(); // 0=周日, 1=周一, ..., 6=周六

    if (firstDayWeek === 0) {
        // 1号是周日，第一个周一是2号
        firstMonday.setDate(2);
    } else if (firstDayWeek > 1) {
        // 1号是周二到周六，第一个周一是下周一
        firstMonday.setDate(1 + (8 - firstDayWeek));
    }
    // 如果1号是周一，firstMonday就是1号

    // 计算当前日期是第几个周一
    const diffTime = date.getTime() - firstMonday.getTime();
    const diffDays = Math.floor(diffTime / (1000 * 60 * 60 * 24));

    let weekOfMonth;
    if (diffDays < 0) {
        // 当前日期在第一个周一之前，属于第1周
        weekOfMonth = 1;
    } else {
        // 计算周数
        weekOfMonth = Math.floor(diffDays / 7) + 1;
    }

    return `${year}${month}.${weekOfMonth}`;
}